import org.junit.Test;

import java.util.*;

public class LeeCode {
    /**
     * 输入:
     * "tree"
     *
     * 输出:
     * "eert"
     *
     * 解释:
     * 'e'出现两次，'r'和't'都只出现一次。
     * 因此'e'必须出现在'r'和't'之前。此外，"eetr"也是一个有效的答案。
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/sort-characters-by-frequency
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     */
    public Map<Character,Integer> map=new HashMap<>();
    @Test
    public  void test1(){
        String str="trreeee";
        final char[] chars = str.toCharArray();
        for(int i=0,l=chars.length-1;i<=l;i++,l--){
            if(i!=l){
                this.Count(map,chars,i);
                this.Count(map,chars,l);
            }
            if(i==l){
                this.Count(map,chars,i);
            }
        }
        List<Character> entrySet= new ArrayList<>(map.keySet());//只对key排序
        Collections.sort(entrySet, (o1, o2) -> map.get(o2)- map.get(o1));//递减
        str="";
        for (char entry : entrySet) {
            int temp=map.get(entry);
            for (int i = 0; i < temp; i++) {
                str+=entry;
            }
        }
        System.out.printf(str);
    }
    public void Count(Map<Character,Integer> map, char[] chars,int index){
        int fq=map.getOrDefault(chars[index],0)+1;//获取不到key，则返回默认值0  +1
        map.put(chars[index],fq);
    }

}
